package sprite.estatico;

import java.util.TreeMap;
import javax.swing.ImageIcon;

/**
 * Clase que modela un repositorio de sprites
 * 
 * Solo una instancia de icono es creada con el proposito de que entidades
 * similares que solo varian en su posicion compartan su representacion grafica
 * y se minimize la utilizacion de recursos.
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */

public class SpriteObstaculo {

	/**
	 * Atributos de instancia
	 */

	protected TreeMap<String, ImageIcon> iconos;

	/**
	 * El constructor crea el mapeo e inserta aquellas entradas que son estandar
	 * del Super Mario Bros
	 */
	public SpriteObstaculo() {
		iconos = new TreeMap<String, ImageIcon>();
		InitIcono();
	}

	/**
	 * Metodo interno de la clase que crea e inicializa los diferentes iconos de
	 * los obstaculos que se encontraran en el nivel
	 * 
	 */
	private void InitIcono() {
		ImageIcon icon;

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/obstaculos/ladrillo.gif"));

		iconos.put("ladrillo", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/obstaculos/bloque.gif"));

		iconos.put("bloque", icon);

		icon = new ImageIcon();

		iconos.put("piso", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/powerups/moneda.gif"));

		iconos.put("contenedor", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/obstaculos/cajapowerup.gif"));

		iconos.put("cajapowerup", icon);

		icon = new ImageIcon(getClass().getClassLoader().getResource(
				"sprite/icon/obstaculos/cajausada.gif"));

		iconos.put("cajausada", icon);

	}

	/**
	 * Icono del ladrillo
	 * 
	 * @return ladrillo
	 */
	public ImageIcon getLadrillo() {
		return iconos.get("ladrillo");
	}

	/**
	 * Icono del bloque
	 * 
	 * @return bloque
	 */
	public ImageIcon getBloque() {
		return iconos.get("bloque");
	}

	/**
	 * Icono del piso
	 * 
	 * @return piso
	 */
	public ImageIcon getPiso() {
		return iconos.get("piso");
	}

	/**
	 * Icono de la caja-incognita
	 * 
	 * @return caja-incognita
	 */
	public ImageIcon getCajaPowerUp() {
		return iconos.get("cajapowerup");
	}

	/**
	 * Icono de la caja-incognita vacia
	 * 
	 * @return caja-incognita usada
	 */
	public ImageIcon getCajaUsada() {
		return iconos.get("cajausada");
	}

	/**
	 * Retorna, si existe, el sprite relacionado con la clave pasada por
	 * parametro
	 * 
	 * @param key
	 *            clave del icono que se desea buscar en el mapeo
	 * @return icon
	 */
	public ImageIcon getSprite(String key) {
		key = key.toLowerCase();

		// Si la clave ingresada no concuerda con ningun icono del mapeo, se
		// retorna null

		return iconos.get(key);
	}

	// comandos

	/**
	 * Metodo para agregar nuevos pares obstaculo-sprite al mapeo
	 * 
	 * @param icon
	 *            icono que se desea asignar
	 * @param key
	 *            clave del icono
	 */
	public void addSprite(ImageIcon icon, String key) {
		key = key.toLowerCase();

		// Si se ingresa una clave existente, el icono es reemplazado

		iconos.put(key, icon);
	}

}
